package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.Conexion;
import bean.Articulo;

public class ArticuloDAO {
	
	public List<Articulo> listar() throws SQLException{
		List<Articulo> listado = new ArrayList<Articulo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,campo,descripcion,orden,situacion " +
				"FROM tbl_descripcion_articulo");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Articulo descripcion = new Articulo();
			descripcion.setId(rs.getInt("id"));
			descripcion.setCampo(rs.getString("campo"));
			descripcion.setDescripcion(rs.getString("descripcion"));
			descripcion.setOrden(rs.getInt("orden"));
			descripcion.setSituacion(rs.getString("situacion"));
			listado.add(descripcion);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Articulo> buscarPorArticulo(String filtro,String situacion) throws SQLException{
		List<Articulo> listado = new ArrayList<Articulo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,campo,descripcion,orden,situacion " +
						"FROM tbl_descripcion_articulo WHERE situacion in ("+situacion+") and campo like ?");
		pstm.setString(1, filtro + "%");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Articulo descripcion = new Articulo();
			descripcion.setId(rs.getInt("id"));
			descripcion.setCampo(rs.getString("campo"));
			descripcion.setDescripcion(rs.getString("descripcion"));
			descripcion.setOrden(rs.getInt("orden"));
			descripcion.setSituacion(rs.getString("situacion"));
			listado.add(descripcion);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Articulo> buscarAlias(String filtro,String situacion) throws SQLException{
		List<Articulo> listado = new ArrayList<Articulo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,campo,descripcion,orden,situacion " +
				"FROM tbl_descripcion_articulo WHERE situacion in ("+situacion+") and descripcion like ?");
		pstm.setString(1, filtro + "%");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Articulo descripcion = new Articulo();
			descripcion.setId(rs.getInt("id"));
			descripcion.setCampo(rs.getString("campo"));
			descripcion.setDescripcion(rs.getString("descripcion"));
			descripcion.setOrden(rs.getInt("orden"));
			descripcion.setSituacion(rs.getString("situacion"));
			listado.add(descripcion);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Articulo> buscarAlias(String filtro) throws SQLException{
		List<Articulo> listado = new ArrayList<Articulo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,campo,descripcion,orden,situacion " +
				"FROM tbl_descripcion_articulo WHERE descripcion = ?");
		pstm.setString(1, filtro);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Articulo descripcion = new Articulo();
			descripcion.setId(rs.getInt("id"));
			descripcion.setCampo(rs.getString("campo"));
			descripcion.setDescripcion(rs.getString("descripcion"));
			descripcion.setOrden(rs.getInt("orden"));
			descripcion.setSituacion(rs.getString("situacion"));
			listado.add(descripcion);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Articulo> buscarPorOrden(int filtro,String situacion) throws SQLException{
		List<Articulo> listado = new ArrayList<Articulo>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,campo,descripcion,orden,situacion " +
				"FROM tbl_descripcion_articulo WHERE situacion in ("+situacion+") and orden=?");
		pstm.setInt(1, filtro);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Articulo descripcion = new Articulo();
			descripcion.setId(rs.getInt("id"));
			descripcion.setCampo(rs.getString("campo"));
			descripcion.setDescripcion(rs.getString("descripcion"));
			descripcion.setOrden(rs.getInt("orden"));
			descripcion.setSituacion(rs.getString("situacion"));
			listado.add(descripcion);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public int insertar(Articulo descripcion) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"insert into tbl_descripcion_articulo (campo,descripcion,orden,situacion,usuario_creacion,fecha_creacion) values (?,?,?,?,?,?)");
		pstm.setString(1, descripcion.getCampo());
		pstm.setString(2, descripcion.getDescripcion());
		pstm.setInt(3, descripcion.getOrden());
		pstm.setString(4, descripcion.getSituacion());
		pstm.setString(5, descripcion.getUsuario_creacion());
		pstm.setInt(6, descripcion.getFecha_creacion());
		int resultado = pstm.executeUpdate();
		pstm.close();
		return resultado;
	}
	
	public int actualizar(Articulo descripcion) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"update tbl_descripcion_articulo set campo = ?,descripcion = ?,orden = ?,situacion = ?,usuario_modificacion = ?,fecha_modificacion = ? where id = ?");
		pstm.setString(1, descripcion.getCampo());
		pstm.setString(2, descripcion.getDescripcion());
		pstm.setInt(3, descripcion.getOrden());
		pstm.setString(4, descripcion.getSituacion());
		pstm.setString(5, descripcion.getUsuario_modificacion());
		pstm.setInt(6, descripcion.getFecha_modificacion());
		pstm.setInt(7, descripcion.getId());
		int resultado = pstm.executeUpdate();
		pstm.close();
		return resultado;
	}
	
}
